package com.onepice.mlp.utils.commom;

import java.io.File;

/**
 * 目录结构打印工具
 *
 * @author FireWang
 * @date 2022/1/12
 */
public class PathUtil {

    /**
     * 打印出文件路径结构树
     *
     * @param file
     */
    private static void printFilesTree(File file, int level) {
        //过滤隐藏文件夹
        if (file != null && !file.getName().startsWith(".") && !file.getName().contains("target")) {
            //打印本行路径
            System.out.println(printLevelLine(level) + file.getName());
            /**
             * file是文件的话，打印完本行就结束；
             * file是目录就往下打印内部目录。
             */
            if (file.isDirectory()) {
                //列出当前目录下所有文件（目录，文件），如果没有就直接退出
                File[] files = file.listFiles();
                if (files != null) {
                    //打印下级目录内容
                    level += 1;
                    for (int i = 0; i < files.length; i++) {
                        File f = files[i];
                        printFilesTree(f, level);
                    }
                }
            }
        }
    }

    /**
     * 根据目录级数打印本行结构
     *
     * @param level 目录级数
     */
    private static String printLevelLine(int level) {
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < level; i++) {
            if (i == level - 1) {
                sb.append("|---");
            } else {
                sb.append("    ");
            }
        }
        return sb.toString();
    }

    public static void main(String[] args) {
        //和本地目录系统相关联
        File file = new File("/Users/fire/Documents/Gitee/mlp");
        printFilesTree(file, 0);
    }
}
